package com.winit.common.openApi;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.internal.LinkedTreeMap;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by wanglin on 2018/5/29.
 */
public class JsonObjectUtil {
    public static JSONObject parseJsonString(JSONObject jsonObject){
        String jsonStr = jsonObject.toJSONString();
        if(jsonStr.contains("@type")){
            jsonStr=jsonStr.replaceAll("@type","modelType");
        }
        JSONObject json = new JSONObject();
        LinkedTreeMap<String, Object> jsonMap = JSONObject.parseObject(jsonStr, new TypeReference<LinkedTreeMap<String, Object>>() {
        });
        for (Map.Entry<String, Object> entry : jsonMap.entrySet()) {
            if(entry.getValue() instanceof Map){
                json.put(entry.getKey(),parseJsonString((JSONObject) entry.getValue()));
            }else if(entry.getValue() instanceof List){
                json.put(entry.getKey(),parseJsonString((JSONArray) entry.getValue()));
            }else{
                if(!"modelType".equals(entry.getKey())){
                    json.put(entry.getKey(),"");
                }else{
                    json.put(entry.getKey(),entry.getValue());
                }
            }
        }
        json=JSONObject.parseObject(json.toJSONString().replaceAll("modelType","@type")) ;
        return json;
    }

    public static List<Object> parseJsonString(JSONArray jsonArray){
        List<Object> jsons = new ArrayList<Object>();
        for(int i=0;i<jsonArray.size();i++){
            if(jsonArray.get(i) instanceof Map){
                JSONObject jsonObject= (JSONObject) jsonArray.get(i);
                jsons.add(parseJsonString(jsonObject));
            }

        }
        return jsons;
    }
}
